#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    static bool cmp(const vector<int> &a, const vector<int> &b){
        if(a[1]!=b[1]) return a[1]<b[1];
        else return a[0]<b[0];
    }
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        sort(people.begin(), people.end(), cmp);
        
        int n = people.size();
        for(int i=0; i<n; ++i){
            int cnt = people[i][1];
            int j = 0;
            while(j < i && cnt>=0){
                if(people[j][0] >= people[i][0]) --cnt;
                if(cnt < 0) break;
                ++j;
            }
            if(cnt < 0){
                swap(people[i], people[j]);
            }
        }
        return people;
    }
};

//链表版本
// class Solution {
// public:
//     // 身高从大到小排（身高相同k小的站前面）
//     static bool cmp(const vector<int>& a, const vector<int>& b) {
//         if (a[0] == b[0]) return a[1] < b[1];
//         return a[0] > b[0];
//     }
//     vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
//         sort (people.begin(), people.end(), cmp);
//         list<vector<int>> que; // list底层是链表实现，插入效率比vector高的多
//         for (int i = 0; i < people.size(); i++) {
//             int position = people[i][1]; // 插入到下标为position的位置
//             std::list<vector<int>>::iterator it = que.begin();
//             while (position--) { // 寻找在插入位置
//                 it++;
//             }
//             que.insert(it, people[i]);
//         }
//         return vector<vector<int>>(que.begin(), que.end());
//     }
// };